package com.hqq.pack3;
/**
 * 学习环绕通知
 */


import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;

import java.util.Date;

@Aspect
public class MyAspect {


    @Around(value = "execution(* *..SomeServiceImpl.doAround(..)) ")
    public Object myAround(ProceedingJoinPoint pjp) throws Throwable {

        /**
         * 功能特点3演示-控制方法的调用
         * 例如：只有在name为hqq时 输出“hhhh”
         * 否则进行方法调用
         */
        //获取参数
        String name="";
        Object[] args=pjp.getArgs();
        if (args != null && args.length>1){
            Object arg = args[0];
            name = (String)arg;

        }
        Object result = null;
        if (name.equals("hqq")){
            System.out.println("hhhh,input hqq noAround");
        }else {

            System.out.println("环绕通知：在目标方法之前，时间"+ new Date());
            //1-目标实现调用
            result = pjp.proceed();
            //与jdk的动态代理等同
            //        res = method.invoke(target,args);
            //        ServiceTools.doTrans();

            //2==根据功能需求 在前后填入切面
            System.out.println("环绕通知，在目标方法之后，提交事务");


            /**
             * 功能：修改执行结果
             * 修改的结果赋值给了测试方法中的str
             *
             */
            if(result != null){
                result = "changeRes";
            }
        }


        //3返回目标方法的执行结果
        return result;
    }



}
